<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>一个大的用户 | Elasticsearch: 权威指南 | Elastic</title>
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
</head>
<body>
<div class="main-container">
    <section id="content">
        
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原文地址: <a href="https://www.elastic.co/guide/cn/elasticsearch/guide/current/one-big-user.html" rel="nofollow">https://www.elastic.co/guide/cn/elasticsearch/guide/current/one-big-user.html</a>, 版权归 www.elastic.co 所有<br/>
                            英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/guide/current/one-big-user.html" rel="nofollow">https://www.elastic.co/guide/en/elasticsearch/guide/current/one-big-user.html</a>
                            </div>
                        <!-- start body -->
                  <div class="page_header">
<b>请注意:</b><br>本书基于 Elasticsearch 2.x 版本，有些内容可能已经过时。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch: 权威指南</a></span>
»
<span class="breadcrumb-link"><a href="modeling-your-data.html">数据建模</a></span>
»
<span class="breadcrumb-link"><a href="scale.html">扩容设计</a></span>
»
<span class="breadcrumb-node">一个大的用户</span>
</div>
<div class="navheader">
<span class="prev">
<a href="faking-it.html">« 利用别名实现一个用户一个索引</a>
</span>
<span class="next">
<a href="finite-scale.html">扩容并不是无限的 »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="one-big-user"></a>一个大的用户<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/edit/cn/410_Scaling/75_One_big_user.asciidoc">edit</a>
</h2>
</div></div></div>
<p>大规模流行论坛都是从小论坛起步的。
有一天我们会发现共享索引中的一个分片要比其它分片更加繁忙，因为这个分片中的一个论坛的文档变得更加热门。
这时，那个论坛需要属于它自己的独立的索引。</p>

<p>我们用来提供一个用户一个索引的索引别名给了我们一个简洁的迁移论坛的方式。</p>

<p>第一步就是为那个论坛创建一个新的专用的索引，并为其分配合理的分片数，可以满足一定预期的数据增长：</p>
<div class="pre_wrapper lang-json">
<pre class="programlisting prettyprint lang-json">PUT /baking_v1
{
  "settings": {
    "number_of_shards": 3
  }
}</pre>
</div>
<p>第二步就是将共享索引中的数据迁移到专用的索引中，可以通过<a class="xref" href="scroll.html" title="游标查询 Scroll"><code class="literal">scroll</code></a>查询和<a class="xref" href="bulk.html" title="批量操作"><code class="literal">bulk</code> API</a>来实现。
当迁移完成时，可以更新索引别名指向那个新的索引：</p>
<div class="pre_wrapper lang-json">
<pre class="programlisting prettyprint lang-json">POST /_aliases
{
  "actions": [
    { "remove": { "alias": "baking", "index": "forums"    }},
    { "add":    { "alias": "baking", "index": "baking_v1" }}
  ]
}</pre>
</div>
<p>更新索引别名的操作是原子性的；就像在拨动一个开关。你的应用程序还是在与 <code class="word">baking</code> API 交互并且对于它已经指向一个专用的索引毫无感知。</p>

<p>专用的索引不再需要过滤器或者自定义的路由了。我们可以依赖于 Elasticsearch 默认使用的文档的 <code class="literal">_id</code> 字段来做分区。</p>

<p>最后一步是从共享索引中删除旧的文档，可以使用之前的路由和论坛ID来搜索，然后进行批量(bulk)删除来实现。</p>

<p>一个用户一个索引(index-per-user)模型的优雅之处在于它允许你减少资源消耗，保持低成本，同时给了你在需要时不停机、灵活扩容的能力。</p>
</div>
<div class="navfooter">
<span class="prev">
<a href="faking-it.html">« 利用别名实现一个用户一个索引</a>
</span>
<span class="next">
<a href="finite-scale.html">扩容并不是无限的 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>